/**
 ********************************************************************************************************
 * @file           delay.c
 * @author         zhenghao
 * @brief          延时驱动代码
 * MCU:            CMS8S6990
 * 按键原理：      设置一个中断周期为100us的定时器，在中断函数设置标志位，等待标志位空循环
 *                 
 ********************************************************************************************************
 */
#include <CMS8S6990.H>

uint8_t GucTmr1DelayFlag = 0;																		/*延时判断标志位*/

/**
  * @brief  1ms级延时
  * @param  无
  * @retval 无
  */
void delay_1ms(void)
{
	TMR_ConfigRunMode(TMR1, TMR_MODE_TIMING,TMR_TIM_16BIT);										/*不支持重装载*/
	TMR_ConfigTimerClk(TMR1, TMR_CLK_DIV_4);														/*Fsys = 24Mhz，Ftimer = 2Mhz,Ttmr=0.5us*/
																									/*Fsys = 24Mhz, Ftimer = 8/4 = 2Mhz,Ttmr=0.5us*/
	TMR_ConfigTimerPeriod(TMR1, (65536-2000)>>8, 65536-2000); 												/*设定重装载值，200*0.5us = 100us,递增计数*/ 
	TMR_EnableOverflowInt(TMR1);
	IRQ_SET_PRIORITY(IRQ_TMR1,IRQ_PRIORITY_LOW);
	IRQ_ALL_ENABLE();
	TMR_Start(TMR1);
	while(GucTmr1DelayFlag == 0);
	GucTmr1DelayFlag = 0;
	TMR_Stop(TMR1);
}

/**
  * @brief  毫秒级延时
  * @param  xms 延时时长，范围：0~32
  * @retval 无
  */
void delay_ms(uint32_t xms)
{
	uint8_t i = 0;
	while(xms--)
	{
		delay_1ms();
	}
}

void delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

void Delay100us(void)	//@8MHz
{
	unsigned char data i;

	_nop_();
	i = 30;
	while (--i);
}

void Delay10us(void)	//@8MHz
{
	_nop_();
	_nop_();
}
void Delay20us(void)	//@8MHz
{
	unsigned char data i;

	i = 4;
	while (--i);
}

void Delay1ms(void)	//@8MHz
{
	unsigned char data i, j;

	i = 8;
	j = 197;
	do
	{
		while (--j);
	} while (--i);
}

